package com.example.common.codeFactory.template;

import com.example.common.codeFactory.CodeGenerateStrategy;
import com.example.common.codeFactory.entity.CodeGenerateType;

/** 菜单编号前缀生成
 * @email: pengyujun53@163.com
 * @author: peng_YuJun
 * @date: 2024/1/16
 * @time: 17:57
 */
public class EntCodeGenrateStrategy implements CodeGenerateStrategy {

    private static final int ID_LENGTH = 4;
    private static final String ID_PREFIX = "ent";

    @Override
    public boolean isSupport(CodeGenerateType codeGenerateType) {
        // 在此处判断是否支持指定的编码生成类型
        return codeGenerateType == CodeGenerateType.ENT;
    }

    @Override
    public String generateCode(String prefix, int id) {
        // 生成编号
        StringBuilder codeBuilder = new StringBuilder();

        // 若该前缀含有默认的前缀是要去掉的，“^” 表示匹配字符串的开头
        prefix = prefix.replaceFirst("^" + ID_PREFIX, "");

        // 添加前缀
        codeBuilder.append(ID_PREFIX + prefix);

        // 添加ID
        codeBuilder.append(String.format("%0" + ID_LENGTH + "d", id));

        return codeBuilder.toString();
    }

    @Override
    public int getPriority() {
        // 返回优先级，这里假设默认策略的优先级为1
        return 1;
    }

    @Override
    public String getName() {
        // 返回生成器名称
        return "Ent Code Generator";
    }
}
